package linkedList;

/**
 * 链表的中间结点 -876
 * @author yyz
 * @create 2023-11-23 13:32
 */
public class 链表的中间结点 {
    public ListNode middleNode(ListNode head) {
        // 初始化两个指针，p1和p2，均指向链表头部
        ListNode p1 = head;
        ListNode p2 = head;
        // 当p2指针不为空且p2的下一个节点也不为空时，循环执行以下操作
        while (p2 != null && p2.next != null) {
            // p1指针每次向后移动一步
            p1 = p1.next;
            // p2指针每次向后移动两步
            p2 = p2.next;
            p2 = p2.next;
        }
        // 返回p1指针所指向的节点，即为链表的中间节点
        return p1;
    }


    public static void main(String[] args) {
        ListNode list = ListNode.of(1, 2, 3, 4, 5, 6);

        System.out.println(new 链表的中间结点().middleNode(list));
    }
}
